package br.com.hmm.mb;

import java.util.List;

import javax.faces.component.UIData;

import br.com.hmm.businesslogic.FormulaService;
import br.com.hmm.entidade.Formula;

/**
 * Classe que engloba todas as operações
 * referentes a camada de visão de Fórmulas
 * @author carlos
 *
 */
public class ManterFormulaBean extends GenericoBean {
	
	private Formula formula;
	
	private List<Formula> listaFormulas;
	
	private Formula formulaSelecionada;
	
	private UIData tblFormulas;
	
	public ManterFormulaBean(){
		formula = new Formula();
	}

	public Formula getFormula() {
		return formula;
	}

	public void setFormula(Formula formula) {
		this.formula = formula;
	}
	
	public List<Formula> getListaFormulas() {
		return listaFormulas;
	}

	public void setListaFormulas(List<Formula> listaFormulas) {
		this.listaFormulas = listaFormulas;
	}

	public Formula getFormulaSelecionada() {
		return formulaSelecionada;
	}

	public void setFormulaSelecionada(Formula formulaSelecionada) {
		this.formulaSelecionada = formulaSelecionada;
	}

	public UIData getTblFormulas() {
		return tblFormulas;
	}

	public void setTblFormulas(UIData tblFormulas) {
		this.tblFormulas = tblFormulas;
	}

	/**
	 * Cria um novo objeto Formula,
	 * atualiza a lista de fórmulas
	 * e redireciona para a página de cadastro.
	 * @return String
	 */
	public String novaFormula(){
		formula = new Formula();
		atualizarLista();
		return "goFormula";
	}
	
	/**
	 * Exibi na tela a mensagem
	 * de sucesso se a inserção
	 * for bem sucedida.
	 * @return String
	 */
	public String gravar(){
		try{
			if(FormulaService.inserir(formula) == true){
				atualizarLista();
				adicionarMensagem("Nova fórmula inserida com sucesso.");
			}
		}catch(Exception e){
			adicionarMensagemErro("Não foi possível inserir uma nova fórmula." + e.getLocalizedMessage());
		}
		return "";
	}
	
	/**
	 * Exibe na tela a mensagem
	 * de sucesso ou de erro
	 * referente a atualização dos
	 * dados.
	 * @return String
	 */
	public String atualizar(){
		try{
			if(FormulaService.atualizar(formulaSelecionada) == true){
				adicionarMensagem("Fórmula atualizada com sucesso.");
			}
		}catch(Exception e){
			adicionarMensagemErro("Não foi possível atualizar a fórmula" + e.getLocalizedMessage());
		}
		
		return novaFormula();
	}
	
	/**
	 * Exibe na tela 
	 * todas as fórmulas
	 * existentes.
	 * @return String
	 */
	public String findAll(){
		try{
			setListaFormulas(FormulaService.findAll());
			if(listaFormulas.isEmpty()){
				adicionarMensagemErro("Nenhuma fórmula encontrada.");
			}
		}catch(Exception e){
			adicionarMensagemErro("Erro: " + e.getLocalizedMessage());
		}
		return "";
	}
	
	/**
	 * Atualiza a lista de fórmulas
	 */
	public void atualizarLista(){
		formula = new Formula();
		findAll();
	}
	
	/**
	 * Recebe os dados de uma 
	 * linha da tabela de fórmulas
	 * e envia para páginda de edição
	 * @return String
	 */
	public String edicaoFormula(){
		try{
			formulaSelecionada = (Formula) tblFormulas.getRowData();
			return "goEdicaoFormula";
		}catch(Exception e){
			adicionarMensagemErro("Não foi possível recuperar os dados da fórmula." + e.getLocalizedMessage());
		}
		return "";
	}
	
	/**
	 * Se a deleção for sucedida
	 * retira a linha deletada
	 * da tabela de fórmulas
	 * e adiciona uma mensagem de erro
	 * ou de sucesso.
	 * @return String
	 */
	public String delete(){
		try{
			formulaSelecionada = (Formula) tblFormulas.getRowData();
			if(FormulaService.delete(formulaSelecionada) == true){
				listaFormulas.remove(tblFormulas.getRowIndex());
				adicionarMensagem("Fórmula removida com sucesso.");
			}			
				
		}catch (Exception e) {
			adicionarMensagemErro("Erro ao tentar remover fórmula: " + e.getLocalizedMessage());
		}
		return "";
	}

}
